/* 合并两个有序数组：
    从两个数组的最后一位有效元素开始比较，大的元素拷贝到nums1的最后一位，并依次往前拷贝。
*/

#include <stdio.h>

int main()
{
    int nums1[] = {1, 2, 3, 0, 0, 0};
    int nums2[] = {2, 5, 6};
    int m = 3;/* 标记数组中涉及到对比的元素的个数*/
    int n = 3;
    int idx = (m + n) - 1;/* 表示nums1数组中最后一个元素的下标*/

    int end1 = m - 1;/* 最后一位有效数组的下标*/
    int end2 = n - 1;
    while (end1 >= 0 && end2 >= 0)/* 判断循环的标志*/
    {
        if (nums1[end1] > nums2[end2])
        {
            nums1[idx] = nums1[end1];
            idx--;
            end1--;/* end1往前移一位，便于nums1的前一个元素与nums[end2]进行比较*/

        }
        else 
        {
            nums1[idx] = nums2[end2];
            idx--;
            end2--;
        }
    }
    /* 若进入此次循环，表示nums1已经遍历完毕，而nums2还有元素没有放到nums1中*/
    while (end2 >= 0)
    {
        /* 到这里，则表示nums2中剩余的元素是最小的*/
        nums1[idx] = nums2[end2];
        idx--;
        end2--; 
    }
    for (int idx = 0; idx < (m + n); idx++)
    {
        printf("%d\t",nums1[idx]);
    }

    return 0;
}